home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / PLR1CONTROL.s < prev    next >
Text File  |  1995-09-13  |  11KB  |  752 lines

  1.  
  2. PLR1_mouse_control
  3.  jsr ReadMouse
  4.  jsr PLR1_alwayskeys
  5.  move.l #SineTable,a0
  6.  move.w PLR1s_angspd,d1
  7.  move.w angpos,d0
  8.  and.w #8190,d0
  9.  move.w d0,PLR1s_angpos
  10.  move.w (a0,d0.w),PLR1s_sinval
  11.  adda.w #2048,a0
  12.  move.w (a0,d0.w),PLR1s_cosval
  13.  
  14.  move.l PLR1s_xspdval,d6
  15.  move.l PLR1s_zspdval,d7
  16.  
  17.  neg.l d6
  18.  ble.s .nobug1
  19.  asr.l #1,d6
  20.  add.l #1,d6
  21.  bra.s .bug1
  22. .nobug1
  23.  asr.l #1,d6
  24. .bug1:
  25.  
  26.  neg.l d7
  27.  ble.s .nobug2
  28.  asr.l #1,d7
  29.  add.l #1,d7
  30.  bra.s .bug2
  31. .nobug2
  32.  asr.l #1,d7
  33. .bug2: 
  34.  
  35.  move.w ymouse,d3
  36.  sub.w oldymouse,d3
  37.  add.w d3,oldymouse
  38.  asr.w #1,d3
  39.  cmp.w #50,d3
  40.  ble.s nofastfor
  41.  move.w #50,d3
  42. nofastfor:
  43.  cmp.w #-50,d3
  44.  bge.s nofastback
  45.  move.w #-50,d3
  46. nofastback:
  47.  
  48.  tst.b PLR1_Ducked
  49.  beq.s .nohalve
  50.  asr.w #1,d3
  51. .nohalve
  52.  
  53.  move.w d3,d2
  54.  asl.w #4,d2
  55.  move.w d2,d1
  56.  
  57.  move.w d1,d2
  58.  add.w PLR1_bobble,d1
  59.  and.w #8190,d1
  60.  move.w d1,PLR1_bobble
  61.  add.w PLR1_clumptime,d2
  62.  move.w d2,d1
  63.  and.w #4095,d2
  64.  move.w d2,PLR1_clumptime
  65.  and.w #-4096,d1
  66.  beq.s .noclump
  67.  
  68.  bsr PLR1clump
  69.  
  70. .noclump
  71.  
  72.  
  73.  move.w PLR1s_sinval,d1
  74.  move.w PLR1s_cosval,d2
  75.  
  76.  move.w d2,d4
  77.  move.w d1,d5
  78.  muls lrs,d4
  79.  muls lrs,d5
  80.  
  81.  
  82.  muls d3,d2
  83.  muls d3,d1
  84.  sub.l d4,d1
  85.  add.l d5,d2
  86.  
  87.  sub.l d1,d6
  88.  sub.l d2,d7
  89.  add.l d6,PLR1s_xspdval
  90.  add.l d7,PLR1s_zspdval
  91.  move.l PLR1s_xspdval,d6
  92.  move.l PLR1s_zspdval,d7
  93.  add.l d6,PLR1s_xoff
  94.  add.l d7,PLR1s_zoff
  95.  
  96.  tst.b PLR1_fire
  97.  beq.s .firenotpressed
  98. ; fire was pressed last time.
  99.  btst #6,$bfe001
  100.  bne.s .firenownotpressed
  101. ; fire is still pressed this time.
  102.  st PLR1_fire
  103.  bra .doneplr1
  104.  
  105. .firenownotpressed:
  106. ; fire has been released.
  107.  clr.b PLR1_fire
  108.  bra .doneplr1
  109.  
  110. .firenotpressed
  111.  
  112. ; fire was not pressed last frame...
  113.  
  114.  btst #6,$bfe001
  115. ; if it has still not been pressed, go back above
  116.  bne.s .firenownotpressed
  117. ; fire was not pressed last time, and was this time, so has
  118. ; been clicked.
  119.  st PLR1_clicked
  120.  st PLR1_fire
  121.  
  122. .doneplr1:
  123.  
  124.  bsr PLR1_fall
  125.  
  126.  rts
  127.  
  128. PLR1_follow_path:
  129.  
  130.  move.l pathpt,a0
  131.  move.w (a0),d1
  132.  move.w d1,PLR1s_xoff
  133.  move.w 2(a0),d1
  134.  move.w d1,PLR1s_zoff
  135.  move.w 4(a0),d0
  136.  add.w d0,d0
  137.  and.w #8190,d0
  138.  move.w d0,PLR1_angpos
  139.  
  140.  move.w TempFrames,d0
  141.  asl.w #3,d0
  142.  adda.w d0,a0
  143.  
  144.  cmp.l #endpath,a0
  145.  blt notrestartpath
  146.  move.l #Path,a0
  147. notrestartpath:
  148.  move.l a0,pathpt
  149.  
  150.  rts
  151.  
  152. PLR1_alwayskeys
  153.  move.l #KeyMap,a5
  154.  moveq #0,d7
  155.  move.b operate_key,d7
  156.  move.b (a5,d7.w),d1
  157.  beq.s nottapped
  158.  tst.b OldSpace
  159.  bne.s nottapped
  160.  st PLR1_SPCTAP
  161. nottapped:
  162.  move.b d1,OldSpace
  163.  
  164.  move.b duck_key,d7
  165.  tst.b (a5,d7.w)
  166.  beq.s notduck
  167.  clr.b (a5,d7.w)
  168.  move.l #playerheight,PLR1s_targheight
  169.  not.b PLR1_Ducked
  170.  beq.s notduck
  171.  move.l #playercrouched,PLR1s_targheight
  172. notduck:
  173.  
  174.  move.l PLR1_Roompt,a4
  175.  move.l ToZoneFloor(a4),d0
  176.  sub.l ToZoneRoof(a4),d0
  177.  tst.b PLR1_StoodInTop
  178.  beq.s usebottom
  179.  move.l ToUpperFloor(a4),d0
  180.  sub.l ToUpperRoof(a4),d0
  181. usebottom:
  182.  
  183.  cmp.l #playerheight+3*1024,d0
  184.  bgt.s oktostand
  185.  st PLR1_Ducked
  186.  move.l #playercrouched,PLR1s_targheight
  187. oktostand:
  188.  
  189.  move.l PLR1s_height,d0
  190.  move.l PLR1s_targheight,d1
  191.  cmp.l d1,d0
  192.  beq.s noupordown
  193.  bgt.s crouch
  194.  add.l #1024,d0
  195.  bra noupordown
  196. crouch:
  197.  sub.l #1024,d0
  198. noupordown:
  199.  move.l d0,PLR1s_height
  200.  
  201.  tst.b $27(a5)
  202.  beq.s notselkey
  203.  st PLR1KEYS
  204.  clr.b PLR1PATH
  205.  clr.b PLR1MOUSE
  206.  clr.b PLR1JOY
  207. notselkey:
  208.  
  209.  tst.b $26(a5)
  210.  beq.s notseljoy
  211.  clr.b PLR1KEYS
  212.  clr.b PLR1PATH
  213.  clr.b PLR1MOUSE
  214.  st PLR1JOY
  215. notseljoy:
  216.  
  217.  tst.b $37(a5)
  218.  beq.s notselmouse
  219.  clr.b PLR1KEYS
  220.  clr.b PLR1PATH
  221.  st PLR1MOUSE
  222.  clr.b PLR1JOY
  223. notselmouse:
  224.  
  225.  lea 1(a5),a4
  226.  lea PLR1_GunData,a3
  227.  move.l #GUNVALS,a2
  228.  move.w #4,d1
  229. pickweap
  230.  move.b (a2)+,d0    ; number of gun
  231.  tst.b (a4)+
  232.  beq.s notgotweap
  233.  moveq #0,d2
  234.  move.b d0,d2
  235.  asl.w #5,d2
  236.  tst.b 7(a3,d2.w)
  237.  beq.s notgotweap
  238.  move.b d0,PLR1_GunSelected
  239. notgotweap
  240.  dbra d1,pickweap
  241.  
  242.  tst.b $43(a5)
  243.  beq.s .notswapscr
  244.  tst.b lastscr
  245.  bne.s .notswapscr2
  246.  st lastscr
  247.  
  248.  not.b BIGsmall
  249.  beq.s .dosmall
  250.  
  251.  jsr putinlargescr
  252.  bra .notswapscr2
  253.  
  254. .dosmall:
  255.  jsr putinsmallscr
  256.  bra .notswapscr2
  257.  
  258. .notswapscr:
  259.  clr.b lastscr
  260. .notswapscr2:
  261.  
  262.  rts
  263.  
  264. GUNVALS: 
  265. ; machine gun
  266.  dc.b 0
  267. ; shotgun
  268.  dc.b 7
  269. ; plasma
  270.  dc.b 1
  271. ; grenade
  272.  dc.b 4
  273. ; rocket
  274.  dc.b 2
  275.  
  276. BIGsmall: dc.b 0
  277. lastscr: dc.b 0
  278.  even
  279.  
  280. PLR1_keyboard_control:
  281.  
  282.  move.l #SineTable,a0
  283.  
  284.  jsr PLR1_alwayskeys
  285.  move.l #KeyMap,a5
  286.  
  287.  move.w PLR1s_angpos,d0
  288.  move.w PLR1s_angspd,d3
  289.  move.w #35,d1
  290.  move.w #2,d2
  291.  moveq #0,d7
  292.  move.b run_key,d7
  293.  tst.b (a5,d7.w)
  294.  beq.s nofaster
  295.  move.w #60,d1
  296.  move.w #3,d2
  297. nofaster:
  298.  tst.b PLR1_Ducked
  299.  beq.s .nohalve
  300.  asr.w #1,d2
  301. .nohalve
  302.  
  303.  moveq #0,d4 
  304.  
  305.  move.w d3,d5
  306.  add.w d5,d5
  307.  add.w d5,d3
  308.  asr.w #2,d3
  309.  bge.s .nneg
  310.  addq #1,d3
  311. .nneg:
  312.  
  313.  move.b turn_left_key,templeftkey
  314.  move.b turn_right_key,temprightkey
  315.  move.b sidestep_left_key,tempslkey
  316.  move.b sidestep_right_key,tempsrkey
  317.  
  318.  move.b force_sidestep_key,d7
  319.  tst.b (a5,d7.w)
  320.  beq .noalwayssidestep
  321.  
  322.  move.b templeftkey,tempslkey
  323.  move.b temprightkey,tempsrkey
  324.  move.b #255,templeftkey
  325.  move.b #255,temprightkey
  326.  
  327. .noalwayssidestep:
  328.  
  329.  
  330.  move.b templeftkey,d7
  331.  tst.b (a5,d7.w)
  332.  beq.s noleftturn
  333.  sub.w #10,d3
  334. noleftturn
  335.  move.l #KeyMap,a5
  336.  move.b temprightkey,d7
  337.  tst.b (a5,d7.w)
  338.  beq.s norightturn
  339.  add.w #10,d3
  340. norightturn
  341.  
  342.  cmp.w d1,d3
  343.  ble.s .okrspd
  344.  move.w d1,d3
  345. .okrspd:
  346.  neg.w d1
  347.  cmp.w d1,d3
  348.  bge.s .oklspd
  349.  move.w d1,d3
  350. .oklspd:
  351.  
  352.  add.w d3,d0
  353.  add.w d3,d0
  354.  move.w d3,PLR1s_angspd
  355.  
  356.  move.b tempslkey,d7
  357.  tst.b (a5,d7.w)
  358.  beq.s noleftslide
  359.  add.w d2,d4
  360.  add.w d2,d4
  361.  asr.w #1,d4
  362. noleftslide
  363.  move.l #KeyMap,a5
  364.  move.b tempsrkey,d7
  365.  tst.b (a5,d7.w)
  366.  beq.s norightslide
  367.  add.w d2,d4
  368.  add.w d2,d4
  369.  asr.w #1,d4
  370.  neg.w d4
  371. norightslide
  372.   
  373. noslide:
  374.   
  375.  and.w #8191,d0
  376.  move.w d0,PLR1s_angpos
  377.  
  378.  move.w (a0,d0.w),PLR1s_sinval
  379.  adda.w #2048,a0
  380.  move.w (a0,d0.w),PLR1s_cosval
  381.  
  382.  move.l PLR1s_xspdval,d6
  383.  move.l PLR1s_zspdval,d7
  384.  
  385.  neg.l d6
  386.  ble.s .nobug1
  387.  asr.l #3,d6
  388.  add.l #1,d6
  389.  bra.s .bug1
  390. .nobug1
  391.  asr.l #3,d6
  392. .bug1:
  393.  
  394.  neg.l d7
  395.  ble.s .nobug2
  396.  asr.l #3,d7
  397.  add.l #1,d7
  398.  bra.s .bug2
  399. .nobug2
  400.  asr.l #3,d7
  401. .bug2: 
  402.  
  403.  moveq #0,d3
  404.  
  405.  moveq #0,d5
  406.  move.b forward_key,d5
  407.  tst.b (a5,d5.w)
  408.  beq.s noforward
  409.  neg.w d2
  410.  move.w d2,d3
  411.  
  412. noforward:
  413.  move.b backward_key,d5
  414.  tst.b (a5,d5.w)
  415.  beq.s nobackward
  416.  move.w d2,d3
  417. nobackward:
  418.  
  419.  move.w d3,d2
  420.  asl.w #6,d2
  421.  move.w d2,d1
  422. ; add.w d2,d1
  423. ; add.w d2,d1
  424.  move.w d1,d2
  425.  add.w PLR1_bobble,d1
  426.  and.w #8190,d1
  427.  move.w d1,PLR1_bobble
  428.  add.w PLR1_clumptime,d2
  429.  move.w d2,d1
  430.  and.w #4095,d2
  431.  move.w d2,PLR1_clumptime
  432.  and.w #-4096,d1
  433.  beq.s .noclump
  434.  
  435.  bsr PLR1clump
  436.  
  437. .noclump
  438.  
  439.  
  440.  move.w PLR1s_sinval,d1
  441.  muls d3,d1
  442.  move.w PLR1s_cosval,d2
  443.  muls d3,d2
  444.  
  445.  sub.l d1,d6
  446.  sub.l d2,d7
  447.  move.w PLR1s_sinval,d1
  448.  muls d4,d1
  449.  move.w PLR1s_cosval,d2
  450.  muls d4,d2
  451.  sub.l d2,d6
  452.  add.l d1,d7
  453.  
  454.  add.l d6,PLR1s_xspdval
  455.  add.l d7,PLR1s_zspdval
  456.  move.l PLR1s_xspdval,d6
  457.  move.l PLR1s_zspdval,d7
  458.  add.l d6,PLR1s_xoff
  459.  add.l d7,PLR1s_zoff
  460.  
  461.  move.b fire_key,d5
  462.  tst.b PLR1_fire
  463.  beq.s .firenotpressed
  464. ; fire was pressed last time.
  465.  tst.b (a5,d5.w)
  466.  beq.s .firenownotpressed
  467. ; fire is still pressed this time.
  468.  st PLR1_fire
  469.  bra .doneplr1
  470.  
  471. .firenownotpressed:
  472. ; fire has been released.
  473.  clr.b PLR1_fire
  474.  bra .doneplr1
  475.  
  476. .firenotpressed
  477.  
  478. ; fire was not pressed last frame...
  479.  
  480.  tst.b (a5,d5.w)
  481. ; if it has still not been pressed, go back above
  482.  beq.s .firenownotpressed
  483. ; fire was not pressed last time, and was this time, so has
  484. ; been clicked.
  485.  st PLR1_clicked
  486.  st PLR1_fire
  487.  
  488. .doneplr1:
  489.  
  490.  bsr PLR1_fall
  491.  
  492.  rts
  493. passspace:
  494.  ds.l 400 
  495.  
  496. PLR1_JoyStick_control:
  497.  
  498.  jsr _ReadJoy1
  499.  bra PLR1_keyboard_control
  500.  
  501.  move.l #KeyMap,a5
  502.  move.l #SineTable,a0
  503.  
  504.  btst #1,$dff00c
  505.  sne d0
  506.  btst #1,$dff00d
  507.  sne d1
  508.  btst #0,$dff00c
  509.  sne d2
  510.  btst #0,$dff00d
  511.  sne d3
  512.  moveq #0,d5
  513.  move.b fire_key,d5
  514.  btst #7,$bfe001
  515.  seq (a5,d5.w)
  516.  
  517.  move.b turn_left_key,d5
  518.  move.b d0,(a5,d5.w)
  519.  move.b turn_right_key,d5
  520.  move.b d1,(a5,d5.w)
  521.  eor.b d0,d2
  522.  move.b forward_key,d5
  523.  move.b d2,(a5,d5.w)
  524.  eor.b d1,d3
  525.  move.b backward_key,d5
  526.  move.b d3,(a5,d5.w)
  527.  bra PLR1_keyboard_control
  528.  
  529.  jsr PLR1_alwayskeys
  530.  
  531.  move.w PLR1s_angpos,d0
  532.  move.w #70,d1
  533.  move.w #7,d2
  534.  tst.b $61(a5)
  535.  beq.s .nofaster
  536.  move.w #120,d1
  537.  move.w #10,d2
  538. .nofaster:
  539.  
  540.  tst.b PLR1_Ducked
  541.  beq.s .nohalve
  542.  asr.w #1,d2
  543. .nohalve:
  544.  
  545.  moveq #0,d4 
  546. ; tst.b $67(a5)
  547. ; bne.s slidelr
  548.  
  549.  tst.b $4f(a5)
  550.  beq.s .noleftturn
  551.  sub.w d1,d0
  552. .noleftturn
  553.  move.l #KeyMap,a5
  554.  tst.b $4e(a5)
  555.  beq.s .norightturn
  556.  add.w d1,d0
  557. .norightturn
  558. ; bra.s noslide
  559.  
  560. .slidelr:
  561.  tst.b $39(a5)
  562.  beq.s .noleftslide
  563.  move.w d2,d4
  564.  asr.w #1,d4
  565. .noleftslide
  566.  move.l #KeyMap,a5
  567.  tst.b $3a(a5)
  568.  beq.s .norightslide
  569.  sub.w d2,d4
  570.  asr.w #1,d4
  571. .norightslide
  572.   
  573. .noslide:
  574.   
  575.  and.w #8191,d0
  576.  move.w d0,PLR1s_angpos
  577.  
  578.  move.w (a0,d0.w),PLR1s_sinval
  579.  adda.w #2048,a0
  580.  move.w (a0,d0.w),PLR1s_cosval
  581.  
  582.  move.l PLR1s_xspdval,d6
  583.  move.l PLR1s_zspdval,d7
  584.  
  585.  neg.l d6
  586.  ble.s .nobug1
  587.  asr.l #1,d6
  588.  add.l #1,d6
  589.  bra.s .bug1
  590. .nobug1
  591.  asr.l #1,d6
  592. .bug1:
  593.  
  594.  neg.l d7
  595.  ble.s .nobug2
  596.  asr.l #1,d7
  597.  add.l #1,d7
  598.  bra.s .bug2
  599. .nobug2
  600.  asr.l #1,d7
  601. .bug2: 
  602.  
  603.  moveq #0,d3
  604.  
  605.  tst.b $4c(a5)
  606.  beq.s .noforward
  607.  neg.w d2
  608.  move.w d2,d3
  609. .noforward:
  610.  tst.b $4d(a5)
  611.  beq.s .nobackward
  612.  move.w d2,d3
  613. .nobackward:
  614.  
  615.  move.w d3,d2
  616.  asl.w #6,d2
  617.  move.w d2,d1
  618. ; add.w d2,d1
  619. ; add.w d2,d1
  620.  move.w d1,d2
  621.  add.w PLR1_bobble,d1
  622.  and.w #8190,d1
  623.  move.w d1,PLR1_bobble
  624.  add.w PLR1_clumptime,d2
  625.  move.w d2,d1
  626.  and.w #4095,d2
  627.  move.w d2,PLR1_clumptime
  628.  and.w #-4096,d1
  629.  beq.s .noclump
  630.  
  631.  bsr PLR1clump
  632.  
  633. .noclump
  634.  
  635.  
  636.  and.w #8190,d1
  637.  move.w d1,PLR1_bobble
  638.  
  639.  move.w PLR1s_sinval,d1
  640.  muls d3,d1
  641.  move.w PLR1s_cosval,d2
  642.  muls d3,d2
  643.  
  644.  sub.l d1,d6
  645.  sub.l d2,d7
  646.  move.w PLR1s_sinval,d1
  647.  muls d4,d1
  648.  move.w PLR1s_cosval,d2
  649.  muls d4,d2
  650.  sub.l d2,d6
  651.  add.l d1,d7
  652.  
  653.  add.l d6,PLR1s_xspdval
  654.  add.l d7,PLR1s_zspdval
  655.  move.l PLR1s_xspdval,d6
  656.  move.l PLR1s_zspdval,d7
  657.  add.l d6,PLR1s_xoff
  658.  add.l d7,PLR1s_zoff
  659.  
  660.  tst.b PLR1_fire
  661.  beq.s .firenotpressed
  662. ; fire was pressed last time.
  663.  tst.b $65(a5)
  664.  beq.s .firenownotpressed
  665. ; fire is still pressed this time.
  666.  st PLR1_fire
  667.  bra .doneplr1
  668.  
  669. .firenownotpressed:
  670. ; fire has been released.
  671.  clr.b PLR1_fire
  672.  bra .doneplr1
  673.  
  674. .firenotpressed
  675.  
  676. ; fire was not pressed last frame...
  677.  
  678.  tst.b $65(a5)
  679. ; if it has still not been pressed, go back above
  680.  beq.s .firenownotpressed
  681. ; fire was not pressed last time, and was this time, so has
  682. ; been clicked.
  683.  st PLR1_clicked
  684.  st PLR1_fire
  685.  
  686. .doneplr1:
  687.  
  688.  move.l PLR1s_tyoff,d0
  689.  move.l PLR1s_yoff,d1
  690.  move.l PLR1s_yvel,d2
  691.  sub.l d1,d0
  692.  bgt.s .aboveground
  693.  sub.l #512,d2
  694.  blt.s .notfast
  695.  move.l #0,d2
  696. .notfast:
  697.  add.l d2,d1
  698.  sub.l d2,d0
  699.  blt.s .pastitall
  700.  move.l #0,d2
  701.  add.l d0,d1
  702.  bra.s .pastitall
  703.  
  704. .aboveground:
  705.  add.l d2,d1
  706.  add.l #1024,d2
  707. .pastitall:
  708.  
  709.  move.l d2,PLR1s_yvel
  710.  move.l d1,PLR1s_yoff
  711.  
  712.  rts
  713.  
  714.  
  715. PLR1_clumptime: dc.w 0
  716.  
  717. PLR1clump:
  718.  
  719.  movem.l d0-d7/a0-a6,-(a7)
  720.  move.l PLR1_Roompt,a0
  721.  move.w ToFloorNoise(a0),d0
  722.  
  723.  move.l ToZoneWater(a0),d1
  724.  cmp.l ToZoneFloor(a0),d1
  725.  bge.s THERESNOWATER
  726.  
  727.  cmp.l PLR1_yoff,d1
  728.  blt.s THERESNOWATER
  729.  
  730.  move.w #6-23,d0
  731.  
  732. THERESNOWATER:
  733.  
  734.  tst.b PLR1_StoodInTop
  735.  beq.s .okinbot
  736.  move.w ToUpperFloorNoise(a0),d0
  737. .okinbot:
  738.  
  739.  add.w #23,d0
  740.  
  741.  move.w d0,Samplenum
  742.  move.w #0,Noisex
  743.  move.w #100,Noisez
  744.  move.w #80,Noisevol
  745.  move.b #$f9,IDNUM
  746.  clr.b notifplaying
  747.  jsr MakeSomeNoise
  748.  
  749.  movem.l (a7)+,d0-d7/a0-a6
  750.  
  751.  rts
  752.